package com.lollipop.synthential.java8.lambda.syntax;

import com.lollipop.synthential.java8.lambda.syntax.interfaces.*;

/**
 * @Author: J.K
 * @Date: 2021-02-14 21:56
 * @Description: Lambda语法精简, 可以对照Syntax1
 */
public class Syntax2 {
    public static void main(String[] args) {
        // 语法精简：
        // 1. 参数：
        // 由于在接口的抽象方法中，已经定义了参数的数量和类型，所以...
        // PS:如果需要省略参数类型，则每个参数类型都要省略
        LambdaNoneReturnMultipleParameter lambda1 = (a, b) -> {
            System.out.println("Hello World!");
        };

        // 2. 参数小括号：
        // 如果参数列表中，参数的数量只有一个，此时小括号可以省略
        LambdaNoneReturnSingleParameter lambda2 = a -> {
            System.out.println("Hello World!");
        };

        // 3. 方法大括号：
        // 如果方法体中只有一条语句，此时大括号可以省略
        LambdaNoneReturnSingleParameter lambda3 = a -> System.out.println("Hello World!");

        // 4. 如果方法体中唯一的一条语句是返回语句,则省略掉大括号的同时也必须省略掉return
        LambdaSingleReturnNoneParameter lambda4 = () -> 10;

        LambdaSingleReturnMultipleParameter lambda5 = (a, b) -> a + b;
        int ret = lambda5.test(10, 22);
        System.out.println(ret);
    }
}
